package Vistas;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;

import Vistas.Componentes.OrdenVistaCabecera;
import Vistas.Componentes.OrdenVistaPaso;

import BaseDeDatos.DBProductos;
import Clases.Orden;
import Clases.Paso;
import Clases.Producto;
import Clases.Usuario;
import Controladores.CargarOrden;
import Controladores.IGuardarOrden;

public class OrdenVista extends JFrame implements ActionListener{
	private static final long serialVersionUID = 1L;
	private Orden orden;
	private Usuario usuario;
	private OrdenVistaCabecera ovc;
	private List<OrdenVistaPaso> ovpList;
	private IGuardarOrden igo;
	private JButton btn;
	
	public OrdenVista(Orden o, Usuario u, IGuardarOrden igo) {
		this.orden = o;		
		this.usuario = u;
		this.igo = igo;
		
		this.ovc = new OrdenVistaCabecera(o, this);
		this.btn = new JButton(); 
		
		this.setBoton();
				
		this.add(this.ovc);
		
		this.ovpList = new ArrayList<OrdenVistaPaso>();
		
		if (o.getPasos().size() > 0) {
			this.addPasos(o.getPasos());
		}
		
		this.add(this.btn);
		
		this.setTitle(this.usuario.getTipo() + ": " + this.usuario.getLegajo());
		
		this.setLayout(new FlowLayout(FlowLayout.CENTER));		
		this.setSize(650, 700);
		this.setVisible(true);		
	}

	private void addPasos(List<Paso> pasoList) {
		for (int j = 0; j < this.ovpList.size(); j++) {
			this.remove(this.ovpList.get(j));
		}
		
		for (int i = 0; i < pasoList.size(); i++) {
			OrdenVistaPaso o = new OrdenVistaPaso(pasoList.get(i), this.usuario);
			
			this.ovpList.add(o);
			this.add(o, BorderLayout.CENTER);
		}

		this.setSize(this.getWidth(), this.getHeight() + 1);
	}
	
	public void actionPerformed(ActionEvent e) {
		if (e.getSource().equals(this.ovc.jcbProducto)) {
			Producto p = this.ovc.getProductoSeleccionado();

			List<Paso> pasoList = null;
			try {
				pasoList = new DBProductos().getPasos(p.getID());
			} catch (ClassNotFoundException e1) {
				e1.printStackTrace();
			}
			
			this.addPasos(pasoList);
		}
		
		if (e.getActionCommand().equals("GUARDAR_NUEVA_ORDEN")) {
			this.getValores();
			
			this.igo.GuardarOrden(this.orden);
		}
		
		if (e.getActionCommand().equals("ACTUALIZAR_ORDEN")) {
			this.getValores();
			this.igo.GuardarOrden(this.orden);
		}
	}

	private void setBoton() {
		if (this.orden.getEstado().equals(Orden.ESTADO_NUEVA)) {
			this.btn.setText("Guardar");
			this.btn.setActionCommand("GUARDAR_NUEVA_ORDEN");
			this.btn.addActionListener(this);
		} else {
			this.btn.setText("Actualizar");
			this.btn.setActionCommand("ACTUALIZAR_ORDEN");
			this.btn.addActionListener(this);
		}
	}

	private void getValores() {
		this.orden.setFechaAlta(this.ovc.getFechaDeAlta());
		this.orden.setDescripcion(this.ovc.getDescripcion());
		this.orden.setFechaEstimada(this.ovc.getFechaEstimada());
		this.orden.setProducto(this.ovc.getProducto());
		this.orden.setCantidad(this.ovc.getCantidad());
		
		this.orden.setPasos(new ArrayList<Paso>());
		
		for (int i = 0; i < this.ovpList.size(); i++) {
//			Paso p = new Paso();
//			
//			p.setDescripcion(this.ovpList.get(i).getDescripcion());
//			p.setEstado(this.ovpList.get(i).getEstado());
//			p.setMateriaPrima(this.ovpList.get(i).getMateriaPrima());
//			p.setUsuario(this.ovpList.get(i).getOperario());
			
			this.orden.getPasos().add(this.ovpList.get(i).getPaso());
		}		
	}
}
